package jblip.util.json;

import java.math.BigDecimal;
import java.util.Vector;

public class JSONArray implements JSONValue<Vector<JSONValue<?>>> {
  
  private final Vector<JSONValue<?>> value;
  
  public JSONArray() {
    value = new Vector<JSONValue<?>>();
  }
  
  public JSONArray(Vector<JSONValue<?>> list) {
    this.value = new Vector<JSONValue<?>>(list);
  }
  
  public void add(JSONValue<?> jsonval) {
    this.value.add(jsonval);
  }
  
  public void addAll(Vector<JSONValue<?>> jsonlist) {
    this.value.addAll(jsonlist);
  }

  public JSONValue<?> get(int index) {
    return value.get(index);
  }
  
  public Integer getInteger(int index) {
    JSONNumber number = (JSONNumber) get(index);
    if (number == null) {
      return null;
    }
    BigDecimal bigint = number.getValue();
    return bigint.intValueExact();
  }
  
  public BigDecimal getBigDecimal(int index) {
    JSONNumber number = (JSONNumber) get(index);
    if (number == null) {
      return null;
    }
    return number.getValue();
  }
  
  public String getString(int index) {
    JSONString str = (JSONString) get(index);
    if (str == null) {
      return null;
    }
    return str.getValue();
  }
  
  public Boolean getBoolean(int index) {
    JSONBoolean bool = (JSONBoolean) get(index);
    if (bool == null) {
      return null;
    }
    return bool.getValue();
  }
  
  public JSONArray getJSONArray(int index) {
    return (JSONArray) get(index);
  }
  
  public JSONObject getJSONObject(int index) {
    return (JSONObject) get(index);
  }
  
  public Boolean isJSONNull(int index) {
    JSONValue<?> jsonnull = get(index);
    return (jsonnull instanceof JSONNull);
  }

  public int length() {
    return value.size();
  }
  
  @Override
  public Vector<JSONValue<?>> getValue() {
    return value;
  }
}
